
# -*- encoding: utf-8 -*-

import re
from apina import Apina
import artlista as l
import parser.parser as parser
from tekstiapu import *



# Sisäänkirjautuminen
def login():
    # eri tiedostoon, ettei uploadata tunnuksia vahingossa
    import eiupata
    return eiupata.login()

# Listan luominen.
def init(wl):
    lst = None
    lst = l.Uppilista2(u"scripts/johdokset/ma-tuma-parit.txt", u"fi-taivutus")
#    lst = l.Uppilista2(u"scripts/johdokset/johdoksen-lisays-verbi.txt", u"fi-taivutus")
    lst.set_log_prefix(u"logit/fi-lisää-rinnakkaismuoto")

    return lst



knimi = u"Suomi"
slnimi = u"Substantiivi"
sllyhenne = u"s"

def sort_key(a):
    global arr, rex
    m = re.match(rex, a)
    if m:
        print "index: {}".format(arr[m.group(1)])
        return arr[m.group(1)]
    return -1

def sort_key_rivit(a):
    m = re.match("\* *([a-z]+) *:", a)
    if m:
        return m.group(1)
    return sort_key(a)

        
# Artikkelin editoiminen.
#  art  (uppilista.Sivu)   artikkeli
def edit(art, oma):
    global knimi, slnimi, sllyhenne


    if art.is_new():
        return art.lykkaa(u"Sivua ei ole")

    try:
        w = parser.WiktSivu(art.wtxt)
    except parser.LiianMontaOsiotaException as e:
        return art.lykkaa(u"Liian monta osiota: {}".format(e))
    except e:
        return art.lykkaa(u"Virhe parsittaessa: {}".format(e))

    if not w:
        return art.lykkaa(u"Ei parsittava")

    kieli = w.kieliosio(u"" + knimi + u"")
    if not kieli:
        return art.lykkaa(u"Ei " + knimi + u"-osiota")
    sanaluokat = kieli.sanaluokat(u"" + slnimi + u"")
    if len(sanaluokat) == 0:
        return art.lykkaa(u"Ei " + slnimi + "-osiota")

    elif len(sanaluokat) > 1:
        return art.lykkaa(u"Monta u" + slnimi + u"-osiota")
    # ainoa u" + slnimi + u"-osio
    sanalk = sanaluokat[0]

    rinnmuodot = None
    liittyvat = sanalk.slaliosio(u"Liittyvät sanat")
    if liittyvat:
        rinnmuodot = liittyvat.slaliosio(u"Rinnakkaiset muodot")

    art.set_summary_prefix(u"/*" + knimi + u"*/: " + slnimi + ": ")

    if liittyvat:
        m = re.search(u"\\b" + oma + u"\\b", liittyvat.tekstiosa() or u"")
        if m:
            print u"Sisältää jo johdoksen, poistetaan."
            tekstiosa = liittyvat.tekstiosa()

            print u"Tekstiosa alussa: " + tekstiosa
            tekstiosa += "\n"
            tekstiosa = re.sub(u"[*:#]* *\[\[" + oma + "\]\] *\n", "", tekstiosa)
            tekstiosa = re.sub(u", *\[\[" + oma + "\]\]", "", tekstiosa)
            tekstiosa = re.sub(u"\[\[" + oma + "\]\] *, *", "", tekstiosa)
            print u"Tekstiosa lopussa: " + tekstiosa
            liittyvat.set_tekstiosa(tekstiosa)
#            art.set_pause("Vanhan poisto")
            # TODO siirrä Rinnmuodot-osioon
            art.add_note(u"Rinnakkaismuoto on jo liittyvissä sanoissa")

        
    if rinnmuodot:
        m = re.search(u"[[{|]" + oma + u"[]}|]", rinnmuodot.tekstiosa() or u"")
        if m:
            return art.lykkaa(u"Rinnakkaismuoto on jo Rinnakkaiset sanat -osiossa")

        tekstiosa = rinnmuodot.tekstiosa() or u""
        if tekstiosa:
            tekstiosa += "\n* [[" + oma + "]]"
            rinnmuodot.set_tekstiosa(tekstiosa)
            art.add_info(u"+rinnakkaismuoto: " + oma)

            print u"Uusi tekstiosa: " + tekstiosa
            art.add_note(u"Lisätty rinnakkaismuoto olevaan")
            #            art.set_pause(u"Lisätty olemassa olevaan")
        else:
            print u"ei ennestään"
            tekstiosa = u"\n* [[" + oma + u"]]"
            rinnmuodot.set_tekstiosa(tekstiosa)

            art.add_info(u"+rinnakkaismuoto: " + oma)

            art.add_note(u"Lisätty rinnakkaismuoto uuteen")
#            art.set_pause() # väliaikainen



    else:
        tekstiosa = u"\n" + u"* [[" + oma + u"]]"
 
        rinnmuodot = sanalk.lisaa_oikeaan_paikkaan(parser.Osio(u"Rinnakkaismuodot"))
        rinnmuodot.set_tekstiosa(tekstiosa)
        art.add_info(u"+rinnakkaismuoto: " + oma)

        art.add_note(u"Lisätty Rinnakkaismuodot-osio")

    
    if art.on_muuttunut():
        return re.sub(u"\n\n\n+", "\n\n", w.teksti())
    return None

